SQL Server数据库(时间戳timestamp)类型 (转载)

您所在的位置:网站首页 sql server建表语句怎么使用 SQL Server数据库(时间戳timestamp)类型 (转载)

SQL Server数据库(时间戳timestamp)类型 (转载)

2023-08-22 07:37| 来源: 网络整理| 查看: 265

timestamp介绍

 

公开数据库中自动生成的唯一二进制数字的数据类型。 timestamp 通常用作给表行加版本戳的机制。 存储大小为 8 个字节。 不可为空的 timestamp 列在语义上等价于 binary(8) 列。可为空的 timestamp 列在语义上等价于 varbinary(8) 列。这将导致在C#程序中获取到的timestamp类型则变成了byte[]类型。所以如果我们需要从数据库中获取并使用这个时间戳的话就必需经过转换。 timestamp 数据类型只是递增的数字,不保留日期或时间。 若要记录日期或时间,请使用 datetime 数据类型。 一个表只能有一个 timestamp 列。每次插入或更新包含 timestamp 列的行时,timestamp 列中的值均会更新。对行的任何更新都会更改 timestamp 值。 总结:SQL Server timestamp 数据类型与时间和日期无关。SQL Server timestamp 是二进制数字,它表明数据库中数据修改发生的相对顺序。实现 timestamp 数据类型最初是为了支持 SQL Server 恢复算法。每次修改页时,都会使用当前的 @@DBTS 值对其做一次标记,然后 @@DBTS 加1。这样做足以帮助恢复过程确定页修改的相对次序,但是 timestamp 值与时间没有任何关系。@@DBTS 返回当前数据库最后使用的时间戳值。插入或更新包含 timestamp 列的行时,将产生一个新的时间戳值。

 

如何使用SQL语句插入timestamp字段值?我们从上面的timestamp定义中知道了timestamp这个值一般都是数据库自动添加和修改的,相当于自动增长标识一样(而且执行update修改语句这个字段也会自动更新),所以一般这个字段我们只做查询操作。如果要更新这个字段则会提示这个错误信息:不能更新时间戳列。但是这个字段是可以手动添加的,不过也只能使用DEFALUT字段(default字段为SQL Server数据库的一个默认值),如果传入其它值则会提示错误信息:不能将显式值插入时间戳列。请对列列表使用 INSERT 来排除时间戳列,或将 DEFAULT 插入时间戳列。

首先我们创建一个带TIMESTAMP类型的表[tb_Ts]:

CREATE TABLE [tb_Ts]([TS] TIMESTAMP)

 

下面是添加timestamp的SQL语句:

INSERT INTO [tb_Ts]([TS]) VALUES(DEFAULT)

 

我们可以将timestamp转换为十六进制或bigint,来方便进行比较和查看:

SELECT TS ,CAST(TS AS VARBINARY(8)) AS 'timestamp转十六进制' ,CONVERT(BIGINT,TS) AS 'timestamp转bigint类型' FROM tb_Ts WHERE CONVERT(BIGINT,TS)>=18004

结果:

 

当然,我们也可以将bigint转换为timestamp类型,来进行比较:

DECLARE @TsValue BIGINT=82006 SELECT TS ,CAST(TS AS VARBINARY(8)) AS 'timestamp转十六进制' ,CONVERT(BIGINT,TS) AS 'timestamp转bigint类型' FROM tb_Ts WHERE TS e.Id).HasColumnName("ID"); entity.Property(e => e.BookCode).HasMaxLength(20); entity.Property(e => e.BookName).HasMaxLength(50); entity.Property(e => e.Isbn) .HasColumnName("ISBN") .HasMaxLength(20); entity.Property(e => e.PersonCode).HasMaxLength(20); entity.Property(e => e.TimeStampNumber).IsRowVersion(); });

可以看到EF Core用IsRowVersion方法对属性TimeStampNumber作了标识。

 

如何在C#中将byte[]类型转换为long类型,请查看这里

 

2.数据库优化:当在处理几十万条并发数据时,我们就可以在使用最频繁的表中添加一列字段,类型为timestamp,添加完毕后系统会自动生成相应的唯一值,如果数据记录有任何改动,timestamp值也会做相应的调整。

 

 

最近被这个时间戳虐到了,,,这几篇博文解释的很好,感谢博主1.http://www.cnblogs.com/iampkm/p/4082916.html2.http://www.cnblogs.com/windows/articles/2149701.html

 

 

原文链接

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3